Image processing and neural networks are both paramount to machine learning. This markdown is a mere compilation of useful examples from the EBImage, imager, and mxnet R packages. The goal is to provide a summary of basic concepts of how images can be processed and submitted to a convolutional neural network in R.
Much of this code is borrowed directly from the below examples. Read the original documentation to learn much more:
- EBImage
- imager
- mxnet
Todo:
- Results are probably incorrect.
- AUC plotting does not work.
For this example: EBImage, mxnet, ggplot2, imager, jpeg, pROC
# EBImage
source("https://bioconductor.org/biocLite.R")
biocLite("EBImage")
# mxnet
cran = getOption("repos")
cran["dmlc"] = "https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/R/CRAN/"
# https://github.com/dmlc
# https://github.com/dmlc/drat
options(repos = cran)
install.packages("mxnet")
library(mxnet)
# ggplot2, imager, jpeg, pROC
install.packages(c("ggplot2", "imager", "jpeg", "pROC"))
Library
library(EBImage)
library(mxnet)
library(ggplot2)
library(imager)
## Loading required package: plyr
## Loading required package: magrittr
##
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
##
## add
## The following object is masked from 'package:plyr':
##
## liply
## The following objects are masked from 'package:EBImage':
##
## channel, dilate, display, erode, resize, watershed
## The following objects are masked from 'package:stats':
##
## convolve, spectrum
## The following object is masked from 'package:graphics':
##
## frame
## The following object is masked from 'package:base':
##
## save.image
library(jpeg)
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following object is masked from 'package:imager':
##
## ci
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
Be sure to also check out:
# h2o - https://www.h2o.ai/
install.packages("h2o")
library(h2o)
# keras - https://keras.rstudio.com/
install.packages("keras")
library(keras)
# install_keras(method = "conda")
install_keras()
# tensorflow - https://tensorflow.rstudio.com/tensorflow/articles/installation.html
install.packages("tensorflow")
library(tensorflow)
install_tensorflow()
koi_fish_EB = EBImage::readImage("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R/image_001.jpg") # load fullsize color image
class(koi_fish_EB)
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
koi_fish_EB
## Image
## colorMode : Color
## storage.mode : double
## dim : 1125 750 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1647059
## [2,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1686275
## [3,] 0.1568627 0.1529412 0.1529412 0.1568627 0.1607843 0.1686275
## [4,] 0.1568627 0.1568627 0.1568627 0.1568627 0.1607843 0.1686275
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1647059 0.1725490
par(mfrow=c(1,2)); plot(koi_fish_EB)
# imageData(koi_fish_EB)
koi_fish = imager::load.image("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R/image_001.jpg") # same image
class(koi_fish) # different class? # http://www.cimg.eu/
## [1] "cimg" "imager_array" "numeric"
koi_fish
## Image. Width: 1125 pix Height: 750 pix Depth: 1 Colour channels: 3
plot(koi_fish)
# as.array(koi_fish)
# shorter names
koiEB = koi_fish_EB
koi = koi_fish
plot(koiEB)
plot(max(koiEB) - koiEB) # do math stuff! (see below)
par(mfrow=c(1,1)); hist(koiEB, lwd = 2) # RGB intensity
# View image data
attributes(koiEB)
## $dim
## [1] 1125 750 3
##
## $colormode
## [1] 2
##
## $class
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
attributes(koi)
## $class
## [1] "cimg" "imager_array" "numeric"
##
## $dim
## [1] 1125 750 1 3
# + / - brightness
koiEB1 = koiEB + 0.5
koiEB2 = koiEB - 0.5
par(mfrow=c(1,2)); plot(koiEB1); plot(koiEB2)
# * contrast
koiEB3 = koiEB * 0.25
koiEB4 = koiEB * 5
plot(koiEB3); plot(koiEB4)
# ^ gamma correction
koiEB5 = koiEB ^ 10
koiEB6 = koiEB ^ 0.75
plot(koiEB5); plot(koiEB6)
# flip, rotate, translate, rotate/translate
koiEB7 = flip(koiEB)
koiEB8 = rotate(koiEB, 45)
koiEB9 = translate(koiEB, c(500, 0))
koiEB10 = translate(rotate(koiEB, 45), c(0, 500))
par(mfrow=c(1,4)); plot(koiEB7); plot(koiEB8); plot(koiEB9); plot(koiEB10)
# grayscale frames
koiEB9 = koiEB
koiEB9 # frames.render
## Image
## colorMode : Color
## storage.mode : double
## dim : 1125 750 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1647059
## [2,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1686275
## [3,] 0.1568627 0.1529412 0.1529412 0.1568627 0.1607843 0.1686275
## [4,] 0.1568627 0.1568627 0.1568627 0.1568627 0.1607843 0.1686275
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1647059 0.1725490
colorMode(koiEB9) = Grayscale
par(mfrow=c(1,1)); plot(koiEB9)
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.
plot(koiEB9, all = T)
attributes(koiEB9)
## $dim
## [1] 1125 750 3
##
## $colormode
## [1] 0
##
## $class
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
# imageData(koiEB9)
# load a URL!
cartoon = load.image("https://carboncostume.com/wordpress/wp-content/uploads/2013/04/Calvin-and-Hobbes.jpg")
plot(cartoon)
# basic info
plot(koi) # coordinates appear, etc.
# what is noise?
# set.seed(1)
noise = array(runif(5*5*5*3),c(5,5,5,3)) #5x5 pixels, 5 frames, 3 colors. All noise
# the color channel comma cascade:
noise[,,,1] # multiple frames of a single color channel
## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.21318936 8.311545e-01 0.61379810 0.9628687 0.1737571
## [2,] 0.08505986 9.498369e-02 0.76716720 0.7120550 0.2789516
## [3,] 0.90477961 2.072432e-01 0.96402600 0.7957811 0.2758740
## [4,] 0.11902953 5.770521e-05 0.04894242 0.1784892 0.1903533
## [5,] 0.50207038 5.375345e-01 0.73544239 0.4309084 0.6168018
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.15938177 0.3891671 0.0172997 0.37744033 0.7837697
## [2,] 0.44284896 0.5439592 0.5977630 0.33253145 0.7812180
## [3,] 0.03286337 0.9284810 0.9818606 0.35535007 0.6832550
## [4,] 0.38742229 0.5560502 0.5521194 0.01641767 0.9439449
## [5,] 0.18813819 0.9655203 0.8315317 0.35553575 0.9918210
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.5556177 0.8054726 0.8179069 0.48789140 0.6663941
## [2,] 0.4345587 0.4229664 0.7010292 0.09492662 0.1227851
## [3,] 0.8433000 0.2165184 0.2554485 0.20921675 0.8781119
## [4,] 0.3058197 0.1722229 0.6778126 0.40245467 0.1332336
## [5,] 0.9424547 0.2940453 0.2072019 0.51252081 0.9481942
##
## , , 4
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.01447726 0.844319663 0.33648610 0.8149585 0.4850301
## [2,] 0.57414566 0.007596434 0.55980259 0.9510957 0.1063308
## [3,] 0.74914650 0.861375988 0.06506313 0.6689902 0.6554983
## [4,] 0.82739965 0.204388297 0.18418400 0.7198673 0.2753958
## [5,] 0.80036192 0.428780418 0.35179584 0.6945254 0.1900198
##
## , , 5
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.6236047 0.6477773 0.4578056 0.1482154 0.06500137
## [2,] 0.8114598 0.5572822 0.3758417 0.7138543 0.09820201
## [3,] 0.6922786 0.3573246 0.7117364 0.7007061 0.06781523
## [4,] 0.5144442 0.4576044 0.1961121 0.7602266 0.23505727
## [5,] 0.9502470 0.3269515 0.5007935 0.8960188 0.79398383
noise[,,1,1] # single frame
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.21318936 8.311545e-01 0.61379810 0.9628687 0.1737571
## [2,] 0.08505986 9.498369e-02 0.76716720 0.7120550 0.2789516
## [3,] 0.90477961 2.072432e-01 0.96402600 0.7957811 0.2758740
## [4,] 0.11902953 5.770521e-05 0.04894242 0.1784892 0.1903533
## [5,] 0.50207038 5.375345e-01 0.73544239 0.4309084 0.6168018
noise[,1,1,1] # col
## [1] 0.21318936 0.08505986 0.90477961 0.11902953 0.50207038
noise[1,,1,1] # row
## [1] 0.2131894 0.8311545 0.6137981 0.9628687 0.1737571
noise = as.cimg(noise) # convert it back to handy cimg format
plot(noise) #, frame = 2)
## Warning in plot.cimg(noise): Showing first frame
# make a grayscale copy
koi_g = grayscale(koi)
plot(koi_g)
# convert to data frame
koi_df = as.data.frame(koi)
head(koi_df) # aha! we have an xy coordinate, color channel, and pixel value
## x y cc value
## 1 1 1 1 0.1529412
## 2 2 1 1 0.1529412
## 3 3 1 1 0.1568627
## 4 4 1 1 0.1568627
## 5 5 1 1 0.1568627
## 6 6 1 1 0.1607843
koi_df = plyr::mutate(koi_df, channel = factor(cc, labels=c("Red","Green", "Blue")))
head(koi_df) # relabel color channel
## x y cc value channel
## 1 1 1 1 0.1529412 Red
## 2 2 1 1 0.1529412 Red
## 3 3 1 1 0.1568627 Red
## 4 4 1 1 0.1568627 Red
## 5 5 1 1 0.1568627 Red
## 6 6 1 1 0.1607843 Red
# Look at rgb channels of the color image
ggplot(koi_df, aes(value, fill = channel)) +
geom_histogram(bins=30) +
facet_wrap(~ channel) +
theme_minimal() +
guides(fill = F)
# gradients
gr = imgradient(koi_g,"xy")
gr
## Image list of size 2
plot(gr)
# pixsets
pix = koi_g > .6 # Select pixels with high luminance
pix
## Pixel set of size 80688. Width: 1125 pix Height: 750 pix Depth: 1 Colour channels: 1
plot(pix)
# highlight contours using pixel sets
pix = (isoblur(koi_g, 4) > .5 )
highlight(pix)
# highlight certain areas
plot(koi_g)
# Start the fill at location (900,400). sigma sets the tolerance
px.flood(koi_g,900, 400,sigma=.35) %>% highlight
# or, just plot boundaries
plot(boundary(pix))
# basic morphological image processing - https://www.cs.auckland.ac.nz/courses/compsci773s1c/lectures/ImageProcessing-html/topic4.htm
plot(koi)
highlight(pix)
#Grow by 5 pixels
grow(pix,5) %>% highlight(col="green", lwd = 3)
#Shrink by 5 pixels
shrink(pix,5) %>% highlight(col="blue", lwd = 3)
#Below is a replication of Taweh Beysolow II / gwens CNN instructions:
#https://github.com/Apress/intro-to-deep-learning-using-r
#Downloading the strings of the image files in each directory
fish_photos = list.files("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R")
fish_photos
## [1] "image_001.jpg" "image_002.jpg" "image_003.jpg" "image_004.jpg"
## [5] "image_005.jpg" "image_006.jpg" "image_007.jpg" "image_008.jpg"
## [9] "image_009.jpg" "image_010.jpg" "image_011.jpg" "image_012.jpg"
## [13] "image_013.jpg" "image_014.jpg" "image_015.jpg" "image_016.jpg"
## [17] "image_017.jpg" "image_018.jpg" "image_019.jpg" "image_020.jpg"
#Preprocessing
#Downloading the image data
img_data = data.frame()
#Turning Photos into Bitmaps
for (i in 1:length(fish_photos)){
img = readJPEG(paste("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R/", fish_photos[i], sep = ""))
#Reshape to 64x64 pixel size and grayscale image
img = Image(img, dim = c(64, 64), color = "grayscale")
#Resizing Image to 28x28 Pixel Size
img = Image(img, dim = c(28, 28))
img = img@.Data
#Transforming to vector
img = as.vector(t(img))
#Adding Label
label = 1
img = c(label, img)
#Appending to List
img_data = rbind(img_data, img)
}
#Transforming data into matrix for input into CNN
training_set = data.matrix(img_data)
training_set = as.data.frame(training_set)
# names(training_set)
training_set$X1 = c(c(rep(1,15), rep(0,5))) # quickly relabel class: koi (1) or not koi (0).
set.seed(1)
#Cross Validating Results
rows = sample(1:nrow(training_set), nrow(training_set)*.75)
rows
## [1] 6 8 11 16 4 14 15 9 19 1 3 2 20 10 5
#Training Set
x_train = t(training_set[rows, -1])
y_train = training_set[rows, 1]
dim(x_train) = c(28,28, 1, ncol(x_train))
#Test Set
x_test = t(training_set[-rows, -1])
y_test = training_set[-rows, 1]
dim(x_test) = c(28,28, 1, ncol(x_test))
#####################################
#Building Convolutional Neural Network
#We will use a LeNet Architecture for this example. Readers may feel free to experiment by using alternative arhcitectures
# this example uses a sigmoid activation type
data = mx.symbol.Variable('data')
#Layer 1
convolution_l1 = mx.symbol.Convolution(data = data, kernel = c(5,5), num_filter = 20)
sigmoid_l1 = mx.symbol.Activation(data = convolution_l1, act_type = "sigmoid")
pooling_l1 = mx.symbol.Pooling(data = sigmoid_l1, pool_type = "max", kernel = c(1,1), stride = c(1,1))
#Layer 2
convolution_l2 = mx.symbol.Convolution(data = pooling_l1, kernel = c(3,3), num_filter = 10)
sigmoid_l2 = mx.symbol.Activation(data = convolution_l2, act_type = "sigmoid")
pooling_l2 = mx.symbol.Pooling(data = sigmoid_l2, pool_type = "max", kernel = c(1,1), stride = c(1,1))
#Fully Connected 1
fl = mx.symbol.Flatten(data = pooling_l2)
full_conn1 = mx.symbol.FullyConnected(data = fl, num_hidden = 500)
sigmoid_l3 = mx.symbol.Activation(data = full_conn1, act_type = "sigmoid")
#Fully Connected 2
full_conn2 = mx.symbol.FullyConnected(data = sigmoid_l3, num_hidden = 40)
#Softmax Classification Layer
CNN = mx.symbol.SoftmaxOutput(data = full_conn2)
##################################################################################################
#Model Training and Parameter Tuning
mx.set.seed(1)
#Learning Rate Parameter
AUC = c()
learn_rate = c(0.01, 0.02, 0.03, 0.10)
CPU = mx.cpu()
for (i in 1:length(learn_rate)){
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 50, array.batch.size = 40,
learning.rate = learn_rate[i],
momentum = 0.9, eval.metric = mx.metric.accuracy,
epoch.end.callback = mx.callback.log.train.metric(100), optimizer = "sgd")
#Calculating Training Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
AUC = append(AUC, roc(as.factor(y_train), as.numeric(Labels))$auc[1])
}
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.2
## [14] Train-accuracy=0.2
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.2
## [11] Train-accuracy=0.2
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.2
## [10] Train-accuracy=0.2
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.2
## [7] Train-accuracy=0.2
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.933333333333333
## [37] Train-accuracy=0.933333333333333
## [38] Train-accuracy=0.933333333333333
## [39] Train-accuracy=0.933333333333333
## [40] Train-accuracy=0.933333333333333
## [41] Train-accuracy=0.933333333333333
## [42] Train-accuracy=0.933333333333333
## [43] Train-accuracy=0.933333333333333
## [44] Train-accuracy=0.933333333333333
## [45] Train-accuracy=0.933333333333333
## [46] Train-accuracy=0.933333333333333
## [47] Train-accuracy=0.933333333333333
## [48] Train-accuracy=0.933333333333333
## [49] Train-accuracy=0.933333333333333
## [50] Train-accuracy=0.933333333333333
# learn about momentum and learning rate adaptation here:
# https://www.willamette.edu/~gorr/classes/cs449/momrate.html
#Plotting AUC
plot(learn_rate, AUC, main = "AUC for CNN \n Training Learning Rate Parameter", xlab = "learning rate",
ylab = "AUC Score", type = "l", col = "cadetblue")
#Momentum Parameter
mx.set.seed(1)
AUC1 = c()
mom = c(0.5, 0.9, 1.5)
CPU = mx.cpu()
for (i in 1:length(mom)){
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 50, array.batch.size = 40,
learning.rate = 0.04,
momentum = mom[i], eval.metric = mx.metric.accuracy,
epoch.end.callback = mx.callback.log.train.metric(100), optimizer = "sgd")
#Calculating Training Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
AUC1 = append(AUC1, roc(as.factor(y_train), as.numeric(Labels))$auc[1])
}
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.2
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.2
## [15] Train-accuracy=0.2
## [16] Train-accuracy=0.2
## [17] Train-accuracy=0.2
## [18] Train-accuracy=0.2
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
#Plotting AUC
plot(mom, AUC1, main = "AUC for CNN \n Training Momentum Parameter", xlab = "momentum",
ylab = "AUC Score", type = "l", col = "cadetblue")
##################################################################################################
#Fitted Model Training
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 150, array.batch.size = 40,
learning.rate = 0.04, momentum = 0.9, eval.metric = mx.metric.accuracy,
optimizer = "sgd")
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.2
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## [51] Train-accuracy=0.8
## [52] Train-accuracy=0.8
## [53] Train-accuracy=0.8
## [54] Train-accuracy=0.8
## [55] Train-accuracy=0.8
## [56] Train-accuracy=0.8
## [57] Train-accuracy=0.8
## [58] Train-accuracy=0.8
## [59] Train-accuracy=0.8
## [60] Train-accuracy=0.8
## [61] Train-accuracy=0.8
## [62] Train-accuracy=0.8
## [63] Train-accuracy=0.8
## [64] Train-accuracy=0.8
## [65] Train-accuracy=0.8
## [66] Train-accuracy=0.8
## [67] Train-accuracy=0.8
## [68] Train-accuracy=0.8
## [69] Train-accuracy=0.8
## [70] Train-accuracy=0.8
## [71] Train-accuracy=0.8
## [72] Train-accuracy=0.8
## [73] Train-accuracy=0.8
## [74] Train-accuracy=0.8
## [75] Train-accuracy=0.8
## [76] Train-accuracy=0.8
## [77] Train-accuracy=0.8
## [78] Train-accuracy=0.8
## [79] Train-accuracy=0.8
## [80] Train-accuracy=0.8
## [81] Train-accuracy=0.8
## [82] Train-accuracy=0.8
## [83] Train-accuracy=0.8
## [84] Train-accuracy=0.8
## [85] Train-accuracy=0.8
## [86] Train-accuracy=0.8
## [87] Train-accuracy=0.8
## [88] Train-accuracy=0.8
## [89] Train-accuracy=0.8
## [90] Train-accuracy=0.8
## [91] Train-accuracy=0.8
## [92] Train-accuracy=0.8
## [93] Train-accuracy=0.8
## [94] Train-accuracy=0.8
## [95] Train-accuracy=0.8
## [96] Train-accuracy=0.8
## [97] Train-accuracy=0.8
## [98] Train-accuracy=0.8
## [99] Train-accuracy=0.8
## [100] Train-accuracy=0.8
## [101] Train-accuracy=0.8
## [102] Train-accuracy=0.8
## [103] Train-accuracy=0.8
## [104] Train-accuracy=0.8
## [105] Train-accuracy=0.8
## [106] Train-accuracy=0.8
## [107] Train-accuracy=0.8
## [108] Train-accuracy=0.8
## [109] Train-accuracy=0.8
## [110] Train-accuracy=0.8
## [111] Train-accuracy=0.8
## [112] Train-accuracy=0.8
## [113] Train-accuracy=0.8
## [114] Train-accuracy=0.8
## [115] Train-accuracy=0.8
## [116] Train-accuracy=0.8
## [117] Train-accuracy=0.8
## [118] Train-accuracy=0.8
## [119] Train-accuracy=0.8
## [120] Train-accuracy=0.8
## [121] Train-accuracy=0.8
## [122] Train-accuracy=0.8
## [123] Train-accuracy=0.8
## [124] Train-accuracy=0.8
## [125] Train-accuracy=0.8
## [126] Train-accuracy=0.8
## [127] Train-accuracy=0.8
## [128] Train-accuracy=0.8
## [129] Train-accuracy=0.8
## [130] Train-accuracy=0.8
## [131] Train-accuracy=0.8
## [132] Train-accuracy=0.8
## [133] Train-accuracy=0.8
## [134] Train-accuracy=0.8
## [135] Train-accuracy=0.8
## [136] Train-accuracy=0.8
## [137] Train-accuracy=0.8
## [138] Train-accuracy=0.8
## [139] Train-accuracy=0.8
## [140] Train-accuracy=0.8
## [141] Train-accuracy=0.8
## [142] Train-accuracy=0.8
## [143] Train-accuracy=0.8
## [144] Train-accuracy=0.8
## [145] Train-accuracy=0.8
## [146] Train-accuracy=0.8
## [147] Train-accuracy=0.8
## [148] Train-accuracy=0.8
## [149] Train-accuracy=0.8
## [150] Train-accuracy=0.8
#Calculating Training Set Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
roc(as.factor(y_train), as.numeric(Labels))
##
## Call:
## roc.default(response = as.factor(y_train), predictor = as.numeric(Labels))
##
## Data: as.numeric(Labels) in 3 controls (as.factor(y_train) 0) < 12 cases (as.factor(y_train) 1).
## Area under the curve: 0.5
curve = roc(as.factor(y_train), as.numeric(Labels))
#Plotting Results
plot(curve, main = "ROC Curve for Convolutional Neural Network \n Train Set")
#Calculating Test Set Accuracy
y_h = predict(cnn_model, x_test)
Labels = max.col(t(y_h)) - 1
roc(as.factor(y_test), as.numeric(Labels))
##
## Call:
## roc.default(response = as.factor(y_test), predictor = as.numeric(Labels))
##
## Data: as.numeric(Labels) in 2 controls (as.factor(y_test) 0) < 3 cases (as.factor(y_test) 1).
## Area under the curve: 0.5
curve1 = roc(as.factor(y_test), as.numeric(Labels))
#Plotting Results
plot(curve1, main = "ROC Curve for Convolutional Neural Network \n Test Set")